//package Cn.Sarkar.MMS.WebAPI
//
//import Cn.Sarkar.EntityDream.CoreEngine.RDBMS.Core.QueryBuilderExtensions.SelectQueryExpression.and
//import Cn.Sarkar.EntityDream.CoreEngine.RDBMS.Core.QueryBuilderExtensions.SelectQueryExpression.equals
//import Cn.Sarkar.EntityDream.CoreEngine.RDBMS.Core.QueryBuilderExtensions.SelectQueryExpression.firstOrNull
//import Cn.Sarkar.EntityDream.CoreEngine.RDBMS.Core.QueryBuilderExtensions.SelectQueryExpression.singleOrNull
//import Cn.Sarkar.MMS.DataBaseDefinations.Additional.Countries
//import Cn.Sarkar.MMS.DataBaseDefinations.Additional.Descriptions
//import Cn.Sarkar.MMS.DataBaseDefinations.Additional.Names
//import Cn.Sarkar.MMS.DataBaseDefinations.Additional.Types
//import Cn.Sarkar.MMS.DataBaseDefinations.Independent.Applications
//import Cn.Sarkar.MMS.Entities.Additional.Country
//import Cn.Sarkar.MMS.Entities.Additional.Description
//import Cn.Sarkar.MMS.Entities.Additional.Name
//import Cn.Sarkar.MMS.Entities.Additional.Type
//import Cn.Sarkar.MMS.Entities.DataSources.IDataSource
//import Cn.Sarkar.MMS.Entities.Independent.Application
//import Cn.Sarkar.MMS.Entities.Independent.ApplicationDomain
//import com.google.gson.Gson
//import java.io.File
//import java.util.*
//
//data class Area(var ID: Int, var Zh: String, var ParentID: Int?, var Ug: String?, var Childs: LinkedList<Area> = LinkedList()){
//
//}
//
//
//
//fun main(args: Array<String>) {
//
//    IDataSource.openAndAutoClose { db ->
//
//        var appName = db.names.singleOrNull { Names.En equals "SarkarMMS" and (Names.Ug equals "SarkarMMS") }
//        if (appName == null) {
//            appName = Name(db).apply {
//                ug = "SarkarMMS"
//                en = "SarkarMMS"
//                category = Applications.CATEGORY
//            }
//            db.names.add(appName)
//            db.saveChanges()
//        }
//
//        var defaultName = db.names.firstOrNull { Names.En equals "Unknown" }
//        if (defaultName == null) {
//            defaultName = Name(db).apply {
//                ug = "نامەلۇم"
//                zh = "未知"
//                en = "Unknown"
//            }
//            db.names.add(defaultName)
//            db.saveChanges()
//        }
//
//        var defaultDescription = db.descriptions.firstOrNull { Descriptions.Ug equals "ۋاقتىنچە چۈشەندۈرۈلىشى يوق" }
//        if (defaultDescription == null) {
//            defaultDescription = Description(db).apply {
//                ug = "ۋاقتىنچە چۈشەندۈرۈلىشى يوق"
//                category = Types.CATEGORY
//            }
//            db.descriptions.add(defaultDescription)
//            db.saveChanges()
//        }
//
//        val mmsApplication = Application(db).apply {
//            description = defaultDescription
//            name = appName
//        }
//        db.applications.add(mmsApplication)
//        db.saveChanges()
//
//        val mmsDomain = ApplicationDomain(db).apply {
//            name = appName
//            description = defaultDescription
//            application = mmsApplication
//            appKey = mmsApplication.guid
//        }
//
//        db.applicationDomains.add(mmsDomain)
//        db.saveChanges()
//
//        val type = Type(db).apply {
//            this.name = defaultName
//            this.description = defaultDescription
//            applicationDomain = mmsDomain
//        }
//        db.types.add(type)
//        db.saveChanges()
//
//        val sortedData = loadSortArea()
//
//
//        fun recursiveArea(base: Country?, area: Area) {
//            val countryName = Name(db).apply {
//                ug = area.Ug ?: ""
//                zh = area.Zh
//                category = Countries.CATEGORY
//            }
//            db.names.add(countryName)
//            db.saveChanges()
//
//            val country = Country(db).apply {
//                this.name = countryName
//                latitude = ""
//                longitude = ""
//            }
//            if (base != null) {
//                country.parentID = base.ID
//            }
//
//            db.countries.add(country)
//            db.saveChanges()
//
//            if (area.Childs.size > 0) {
//                area.Childs.forEach {
//                    recursiveArea(country, it)
//                }
//            }
//        }
//
//        sortedData.forEach {
//            recursiveArea(null, it)
//        }
//    }
//
//    println("ok")
//}
//
//
//fun loadSortArea() : Array<Area>{
//    val data = Gson().fromJson(File("Area.json").readText(), Array<Area>::class.java)
//    data.forEach { if (it.Childs == null) it.Childs = LinkedList() }
//    val list = LinkedList<Area>()
//    list.addAll(data)
//
//    val listTwo = LinkedList<Area>()
//    listTwo.addAll(data)
//
//    list.sortByDescending { it.ParentID }
//
//    list.forEach { area->
//        val child1 = listTwo.firstOrNull { it.ID ==  area.ParentID}
//        if (child1 != null)
//        {
//            child1.Childs.add(area)
//            listTwo.remove(area)
//        }
//    }
//
//    return listTwo.toTypedArray()
//}